浅谈Kettle

概览

Kettle是一款开源的ETL工具,纯Java编写,工作中经常用到一些转换,特此记录。

回刷历史数据

如果历史数据需要大批量回刷,按照时间段跑数据,动辄几亿甚至千亿的数据操作会造成数据库断连,Select的时间可以达到十几分钟,按日跑需要不断地进行改参数,循环脚本可解决

方式一

job中对ETL参数做初始设置:

参数初始化

select	to_number(to_char(date('20210731'),'yyyymmdd')) as p_sysdate_num,
	to_number(to_char(etl_date,'yyyymmdd')) as p_etl_date_num,
	to_char(etl_date,'yyyymmdd') as p_etl_date
	from tmp.etl_incremental

ETL日期经过转换,到字段检验
检验字段的值
如果值小于设置的结束日期,进入循环。
循环日期

select	jobname, trans_name, table_name, etl_frequency,
	etl_date+1  as p_next_etl_date
	from tmp.etl_incremental

对ETL日期更新,更新之后执行转换。

方式二

在job中连线闭环,通过【检验字段的值】判断结束循环,该方式较一,出现问题容易导致kettle崩溃。job设置
在日期初始化中设置开始日期和结束日期,设置变量中参数需大写 日期初始化
设置变量后在job和转换中均可以通过${参数}使用
设置变量
表输入中对日期进行增量处理,赋值给变量
循环日期 这一步是sql执行脚本,在trans属性的命名参数中可增加常量参数。
执行脚本

血缘关系解析

导出xml
资源导出成xml文件
解析xml
从xml中获取到步骤和转换,转换和转换,作业和转换之间的关系,方便追踪血缘关系,为下一步数据治理打好基础。

数据质量监控

数据量对比
ETL同步在实际过程中,往往会遇见上游回刷,每日监控同步数据量及重要指标